// 创建一个装饰器 spy(func)，它应该返回一个包装器，该包装器将所有对函数的调用保存在其 calls 属性中。
// 每个调用都保存为一个参数数组。

function work(a, b) {
	console.log(a + b)
	// work 是一个任意的函数或方法
}

work = spy(work)

work(1, 2) // 3
work(4, 5) // 9

for (let args of work.calls) {
	console.log('call:' + args.join()) // "call:1,2", "call:4,5"
}

// spy 这个是装饰器
function spy(func) {
	// fn 这个是包装器
	function fn(...args) {
		fn.calls.push(args)
		func.apply(null, args)
	}

	fn.calls = []

	return fn
}
